﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALCategoria
    {
        public List<BTO.Categoria> list()
        {
            //Pesquisa dados
            var categoriasEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var categorias = (from c in categoriasEntities.Categoria
                              select new BTO.Categoria
                              {
                                  IDCategoria = c.IDCategoria,
                                  descricao = c.descricao

                              }).ToList();

            return categorias;
        }

        public BTO.Categoria getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var categoriasEntities = new TISModel.TISEntities();
            var categoria = (from c in categoriasEntities.Categoria
                             where c.IDCategoria == id
                             select new BTO.Categoria
                             {
                                 IDCategoria = c.IDCategoria,
                                 descricao = c.descricao

                             }).FirstOrDefault();

            return categoria;
        }

        public BTO.Categoria getByDescricao(String descricao)
        {
            //Pesquisa dados e cria modelo para retornar
            var categoriasEntities = new TISModel.TISEntities();
            var categoria = (from c in categoriasEntities.Categoria
                             where c.descricao == descricao
                             select new BTO.Categoria
                             {
                                 IDCategoria = c.IDCategoria,
                                 descricao = c.descricao

                             }).FirstOrDefault();

            return categoria;
        }

        public void insert(BTO.Categoria toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var categoriaEntities = new TISModel.TISEntities();

                TISModel.Categoria categoria = new TISModel.Categoria();
                categoria.descricao = toInsert.descricao;

                categoriaEntities.AddToCategoria(categoria);
                categoriaEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi Possível inserir a categoria!");
            }
        }

        public void update(BTO.Categoria toUpdate)
        {
            var categoriaEntities = new TISModel.TISEntities();
            var categoria = (from c in categoriaEntities.Categoria where c.IDCategoria == toUpdate.IDCategoria select c).FirstOrDefault();

                if (categoria != null)
                {
                    try
                    {
                        categoria.descricao = toUpdate.descricao;
                    
                        categoriaEntities.SaveChanges();
                    }
                    catch (Exception)
                    {
                        throw new System.Exception("Não foi Possível actualizar a categoria!");
                    }
                }
                else {
                    throw new System.Exception("Categoria não encontrada!");
                }           

        }

        public void delete(int id)
        {
            var categoriaEntities = new TISModel.TISEntities();
            var categoria = (from c in categoriaEntities.Categoria where c.IDCategoria == id select c).FirstOrDefault();

            if (categoria != null)
            {
                try
                {
                    categoriaEntities.DeleteObject(categoria);
                    categoriaEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível remover a categoria!");
                }
            }
            else
            {
                throw new System.Exception("Categoria não encontrada!");
            }

        }
    }


}
